﻿'Option Explicit On
'Option Strict On
Imports Outlook = Microsoft.Office.Interop.Outlook
Imports System.IO
Imports Microsoft.VisualBasic.ControlChars
Imports System.Windows.Forms




Public Class Form1


    Private Sub createXML()
        Dim output(9000) As String
        Dim i As Integer = 0

        ' Breng de gebruiker op de hoogte dat het aanmaken van een XML-bestand enige tijd kan duren, verwijzing naar methode
        'messageCreateXML()

        Static start_time As DateTime
        Static stop_time As DateTime
        Dim elapsed_time As TimeSpan
        Dim tijd As String

        start_time = Now

        For Each regel In tboxInvoer.Lines

            If regel.IndexOf("0U") = 0 Or regel.IndexOf("Uf") = 0 Or regel.IndexOf("Uk") = 0 Or regel.IndexOf("Ul") = 0 Or regel.IndexOf("Ur") = 0 Or regel.IndexOf("UZ0") = 0 Then 'Or regel.IndexOf("00K") = 0 Then

                i = i + 1

                If regel.IndexOf("0U") = 0 Then
                    ' Selecteer de Week => 0U is de tag voor de weken
                    Dim huidigeRegel_0U() As String
                    Dim teZoekenString As String = regel

                    ' Split de huidige regel op basis van de comma's
                    huidigeRegel_0U = Split(teZoekenString, ",")

                    For n = 0 To UBound(huidigeRegel_0U)
                        huidigeRegel_0U(n) = huidigeRegel_0U(n).Trim
                        ' Functie checkCharacterReference controleert of er geen tekens zijn die XML niet kan parsen
                        ' voorbeelden zijn de tekens <, >, &, ' en "
                        huidigeRegel_0U(n) = checkCharacterReference(huidigeRegel_0U(n))
                    Next

                    'MessageBox.Show(huidigeRegel_0U(2))

                    If i > 1 Then
                        output(i) = "</vak>" & NewLine & "<vak>" & NewLine & "<week>" & huidigeRegel_0U(2) & "</week>"
                    Else
                        output(i) = "<vak>" & NewLine & "<week>" & huidigeRegel_0U(2) & "</week>"
                    End If

                ElseIf regel.IndexOf("Uf") = 0 Then
                    ' Selecteer het vak => Uf is de tag voor de vakken
                    Dim huidigeRegel_Uf() As String
                    Dim teZoekenString As String = regel

                    ' Split de huidige regel op basis van de comma's
                    huidigeRegel_Uf = Split(teZoekenString, ",")

                    For n = 0 To UBound(huidigeRegel_Uf)
                        huidigeRegel_Uf(n) = huidigeRegel_Uf(n).Trim
                        ' Functie checkCharacterReference controleert of er geen tekens zijn die XML niet kan parsen
                        ' voorbeelden zijn de tekens <, >, &, ' en "
                        huidigeRegel_Uf(n) = checkCharacterReference(huidigeRegel_Uf(n))
                    Next

                    'MessageBox.Show(huidigeRegel_Uf(2))
                    output(i) = "<vaknaam>" & huidigeRegel_Uf(2) & "</vaknaam>"

                ElseIf regel.IndexOf("Uk") = 0 Then
                    ' Selecteer de klassen => Uk is de tag voor de klassen
                    Dim huidigeRegel_Uk() As String
                    Dim teZoekenString As String = regel
                    Dim klassen As String = ""

                    ' Split de huidige regel op basis van de comma's
                    huidigeRegel_Uk = Split(teZoekenString, ",")

                    For n = 0 To UBound(huidigeRegel_Uk)
                        huidigeRegel_Uk(n) = huidigeRegel_Uk(n).Trim
                        ' Functie checkCharacterReference controleert of er geen tekens zijn die XML niet kan parsen
                        ' voorbeelden zijn de tekens <, >, &, ' en "
                        huidigeRegel_Uk(n) = checkCharacterReference(huidigeRegel_Uk(n))
                    Next

                    For x = 1 To UBound(huidigeRegel_Uk)
                        If huidigeRegel_Uk(x) <> "" Then
                            klassen = klassen + ", " & huidigeRegel_Uk(x)
                        End If
                    Next

                    ' Haal de eerste comma weg uit de variabel klassen
                    klassen = klassen.Remove(0, 1)
                    klassen = klassen.Trim

                    output(i) = "<klas>" & klassen & "</klas>"

                    'MessageBox.Show(tbklassen.FindString(klassen))
                    If tbklassen.FindString(klassen) = -1 And klassen.Contains(",") = False Then tbklassen.Items.Add(klassen)




                ElseIf regel.IndexOf("Ul") = 0 Then
                    ' Selecteer de leraren => Ul is de tag voor de leraren
                    Dim huidigeRegel_Ul() As String
                    Dim teZoekenString As String = regel
                    Dim leraren As String = ""

                    ' Split de huidige regel op basis van de comma's
                    huidigeRegel_Ul = Split(teZoekenString, ",")

                    For n = 0 To UBound(huidigeRegel_Ul)
                        huidigeRegel_Ul(n) = huidigeRegel_Ul(n).Trim
                        ' Functie checkCharacterReference controleert of er geen tekens zijn die XML niet kan parsen
                        ' voorbeelden zijn de tekens <, >, &, ' en "
                        huidigeRegel_Ul(n) = checkCharacterReference(huidigeRegel_Ul(n))
                    Next

                    For x = 1 To UBound(huidigeRegel_Ul)
                        If huidigeRegel_Ul(x) <> "" Then
                            leraren = leraren + ", " & huidigeRegel_Ul(x)
                        End If
                    Next

                    ' Haal de eerste comma weg uit de variabel leraren
                    leraren = leraren.Remove(0, 1)
                    leraren = leraren.Trim

                    'MessageBox.Show(leraren)

                    output(i) = "<leraar>" & leraren & "</leraar>"

                ElseIf regel.IndexOf("Ur") = 0 Then
                    ' Selecteer de klaslokalen => Ur is de tag voor de klaslokalen
                    Dim huidigeRegel_Ur() As String
                    Dim teZoekenString As String = regel
                    Dim klaslokalen As String = ""

                    ' Split de huidige regel op basis van de comma's
                    huidigeRegel_Ur = Split(teZoekenString, ",")

                    For n = 0 To UBound(huidigeRegel_Ur)
                        huidigeRegel_Ur(n) = huidigeRegel_Ur(n).Trim
                        ' Functie checkCharacterReference controleert of er geen tekens zijn die XML niet kan parsen
                        ' voorbeelden zijn de tekens <, >, &, ' en "
                        huidigeRegel_Ur(n) = checkCharacterReference(huidigeRegel_Ur(n))
                    Next

                    For x = 1 To UBound(huidigeRegel_Ur)
                        If huidigeRegel_Ur(x) <> "" Then
                            klaslokalen = klaslokalen + ", " & huidigeRegel_Ur(x)
                        End If
                    Next

                    ' Haal de eerste comma weg uit de variabel leraren
                    klaslokalen = klaslokalen.Remove(0, 1)
                    klaslokalen = klaslokalen.Trim

                    'MessageBox.Show(klaslokalen)

                    output(i) = "<lokaal>" & klaslokalen & "</lokaal>"

                ElseIf regel.IndexOf("UZ0") = 0 Then
                    ' Selecteer de dagen en uren => UZ01 is de tag voor de dagen en uren waarop het vak gegeven wordt
                    Dim huidigeRegel_UZ01() As String
                    Dim teZoekenString As String = regel
                    Dim dagenEnUren As String = ""

                    ' Split de huidige regel op basis van de comma's
                    huidigeRegel_UZ01 = Split(teZoekenString, ",")

                    For n = 0 To UBound(huidigeRegel_UZ01)
                        huidigeRegel_UZ01(n) = huidigeRegel_UZ01(n).Trim
                        ' Functie checkCharacterReference controleert of er geen tekens zijn die XML niet kan parsen
                        ' voorbeelden zijn de tekens <, >, &, ' en "
                        huidigeRegel_UZ01(n) = checkCharacterReference(huidigeRegel_UZ01(n))
                    Next

                    'MessageBox.Show(huidigeRegel_UZ0(1))
                    

                End If



            End If
        Next

        Dim xml As String = ""
        For y = 0 To UBound(output)
            xml = xml + output(y) & NewLine
        Next

        xml = xml.Trim()

        'tboxXMLInput.Visible = False
        'tboxXMLInput.Enabled = False
        ' btnXMLExport.Enabled = True
        'tboxXMLOutput.Visible = True

        tboxXMLInput.Text = CStr(xml)

        ''debug
        Dim xmlDeclaratie As String
        Dim input As String

        xmlDeclaratie = "<?xml version=" & Chr(34) & "1.0" & Chr(34) & " encoding=" & Chr(34) & "ISO-8559-1" & Chr(34) & "?>"

        tboxXMLOutput.AppendText(CStr(xmlDeclaratie & NewLine & "<vakken>" & NewLine))
        tboxXMLInput.AppendText(CStr(NewLine & "</vak>" & NewLine & "</vakken>"))

        input = tboxXMLInput.Text

        tboxXMLOutput.AppendText(CStr(input))
        ''debug

        'MessageBox.Show(CStr(i))
        stop_time = Now
        elapsed_time = stop_time.Subtract(start_time)
        tijd = elapsed_time.TotalSeconds.ToString("0.0")

        tboxXMLInput.Clear()







    End Sub



    Private Function checkCharacterReference(ByVal word As String) As String
        ' Functie checkCharacterReference controleert of er geen tekens zijn die XML niet kan parsen
        ' voorbeelden zijn de tekens <, >, &, ' en "

        If word.IndexOf("&") <> -1 Then
            Dim pos As Integer
            pos = word.IndexOf("&")
            word = word.Remove(pos, 1)
            word = word.Insert(pos, "&amp;")

        ElseIf word.IndexOf(">") <> -1 Then
            Dim pos As Integer
            pos = word.IndexOf(">")
            word = word.Remove(pos, 1)
            word = word.Insert(pos, "&gt;")

        ElseIf word.IndexOf("<") <> -1 Then
            Dim pos As Integer
            pos = word.IndexOf("<")
            word = word.Remove(pos, 1)
            word = word.Insert(pos, "&lt;")

        ElseIf word.IndexOf("'") <> -1 Then
            Dim pos As Integer
            pos = word.IndexOf("'")
            word = word.Remove(pos, 1)
            word = word.Insert(pos, "&apos;")
        End If

        Return word
    End Function




    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' Create an Outlook application.

        Dim oApp As Outlook.Application = New Outlook.Application()

        ' Create a new AppointmentItem.
        Dim oAppt As Outlook.AppointmentItem = oApp.CreateItem(Outlook.OlItemType.olAppointmentItem)

        ' Set some common properties.
        oAppt.Subject = "Test van uit Visual Basic"
        oAppt.Body = "Welke gegevens"
        oAppt.Location = "klaslokaal"

        oAppt.Start = Convert.ToDateTime("24/09/2009 9:00:00 AM")
        oAppt.End = Convert.ToDateTime("24/09/2009 1:00:00 PM")
        oAppt.ReminderSet = True
        oAppt.ReminderMinutesBeforeStart = 5
        oAppt.BusyStatus = Outlook.OlBusyStatus.olBusy
        oAppt.IsOnlineMeeting = False

        ' Save to Calendar.
        oAppt.Save()

        ' Clean up.
        oApp = Nothing
        oAppt = Nothing
    End Sub

    Private Sub readTextFile(ByVal pad As String)
        Dim inhoud As String

        ' Lees het tekst bestand uit, en geef het weer in een textbox
        ' Neem een StreamReader classe om het tekstbestand uit te lezen
        Dim objStreamReader As StreamReader
        objStreamReader = File.OpenText(pad)

        ' Lees de hele bestand naar de string inhoud
        inhoud = objStreamReader.ReadToEnd()

        ' Vul de textbox met de variabele contents
        tboxInvoer.Text = inhoud

        ' Sluit de StreamReader class
        objStreamReader.Close()

        If inhoud.IndexOf("AA01 gp-Untis") <> -1 Then
            tboxInvoer.Enabled = True
            ''mnuItemBestandSluiten.Enabled = True
            ''btnMaakXML.Enabled = True
        Else
            ''closeFile()
            MessageBox.Show("U dient een UNTIS csv-bestand te openen!", "Ongeldige CSV-bestand", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If
    End Sub
    Private Function initialDirectory(ByVal os As String, ByVal gebruiker As String, ByVal sysdir As String) As String
        Dim initDir As String = ""
        ' Directory dat standaard wordt weergegeven bij het openen van een bestand
        If (os.IndexOf("NT 6") <> -1) Then      ' Vista check
            sysdir = sysdir.Substring(0, 3)
            initDir = sysdir & "Users\" & gebruiker & "\" & "Documenten"
        ElseIf (os.IndexOf("NT 5") <> -1) Then  ' XP check
            sysdir = sysdir.Substring(0, 3)
            initDir = sysdir & "Documents and Settings\" & gebruiker & "\" & "Mijn documenten"
        End If
        Return initDir
    End Function

    Private Sub btnInlezen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInlezen.Click
        OpenFileDialog.Title = "Open tekst- of csv-bestand"
        OpenFileDialog.Filter = "Tekst Bestand|*.txt|CSV Bestand|*.csv"
        OpenFileDialog.InitialDirectory = initialDirectory(Environment.OSVersion.ToString, Environment.UserName.ToString, Environment.SystemDirectory.ToString)
        OpenFileDialog.ShowDialog()
        ' Lees het tekstbestand volledig uit, verwijzing naar de methode readTextFile
        readTextFile(OpenFileDialog.FileName)


    End Sub

    Private Sub btnXMLExport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnXMLExport.Click
        createXML()
    End Sub

    Private Sub btnophaal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnophaal.Click
        Dim klas As String
        Dim teller As Integer = 0
        Dim dir As String
        Dim huidigeregel As String




        Dim TargetFile As StreamWriter

        klas = tbklassen.SelectedItem

        SaveFileDialog.ShowDialog()
        dir = SaveFileDialog.FileName



        Try
            TargetFile = New StreamWriter(dir & ".xml", True)
        Catch
            MessageBox.Show("Error opening " & dir)
        End Try

        Try
            TargetFile.WriteLine(Now())
            TargetFile.Write(tboxXMLOutput.Text)
            TargetFile.WriteLine()
            TargetFile.WriteLine()
        Catch
            MessageBox.Show("Error writing file")
        End Try

        TargetFile.Close()
        MessageBox.Show("Text saved to " & dir & ".xml")

        Dim test As StreamReader
        Dim vak As String
        Dim docent As String
        Dim lokaal As String
        Dim lesdag As String
        Dim Regel As String


        test = New StreamReader(dir & ".xml", True)


        While test.Peek <> -1

            vak = test.ReadLine()
            If test.Peek <> -1 Then Regel = test.ReadLine

            If Regel.Contains(klas) Then

                docent = (test.ReadLine)
                lokaal = (test.ReadLine)
                lesdag = (test.ReadLine)

                'klas = klas.Remove(0, 9)
                'klas = klas.Remove(klas.Length - 10, 10)


                If docent.Contains("leraar") Then
                    docent = docent.Remove(0, 8)
                    docent = docent.Remove(docent.Length - 9, 9)
                Else
                    docent = "fout in de xml"
                End If


                If vak.Contains("vaknaam") Then
                    vak = vak.Remove(0, 9)
                    vak = vak.Remove(vak.Length - 10, 10)
                Else
                    vak = "fout in de xml"
                End If


                If lokaal.Contains("lokaal") Then
                    lokaal = lokaal.Remove(0, 8)
                    lokaal = lokaal.Remove(lokaal.Length - 9, 9)
                Else
                    lokaal = "fout in de xml"
                End If

                'lesdag = lesdag.Remove(0, 11)
                'lesdag = lesdag.Remove(klas.Length - 12, 12)



                Dim oApp As Outlook.Application = New Outlook.Application()


                Dim oAppt As Outlook.AppointmentItem = oApp.CreateItem(Outlook.OlItemType.olAppointmentItem)


                oAppt.Subject = vak
                oAppt.Body = "Deze les wordt gegeven door " & docent
                oAppt.Location = lokaal
                oAppt.Start = Convert.ToDateTime("24/09/2009 9:00:00 AM")
                oAppt.End = Convert.ToDateTime("24/09/2009 1:00:00 PM")
                oAppt.ReminderSet = True
                oAppt.ReminderMinutesBeforeStart = 5
                oAppt.BusyStatus = Outlook.OlBusyStatus.olBusy
                oAppt.IsOnlineMeeting = False

                oAppt.Save()

                oApp = Nothing
                oAppt = Nothing

            End If

        End While




    End Sub
End Class
